package models

import (
	"time"
)

// Go has several types of tags that can be used in struct fields:
//
// 1. JSON tags - for JSON marshaling/unmarshaling
//    Example: `json:"field_name,omitempty"`
//
// 2. XML tags - for XML marshaling/unmarshaling
//    Example: `xml:"field_name,attr"`
//
// 3. Database tags - for ORM libraries like GORM, sqlx
//    Example: `db:"column_name"` or `gorm:"column:name;type:varchar(100)"`
//
// 4. Form tags - for form binding in web frameworks
//    Example: `form:"field_name"`
//
// 5. Validation tags - for validation libraries
//    Example: `validate:"required,min=1,max=100"`
//
// 6. Binding tags - for request binding (like in Gin)
//    Example: `binding:"required"`
//
// 7. YAML tags - for YAML marshaling/unmarshaling
//    Example: `yaml:"field_name"`
//
// 8. Custom tags - user-defined tags for specific purposes
//    Example: `mytag:"custom_value"`
//
// Multiple tags can be combined in a single struct field:
// Field string `json:"field" db:"field_column" validate:"required"`

// Project model
type Project struct {
	ID              string    `json:"id" db:"id"`
	Name            string    `json:"name" db:"name"`
	Slug            string    `json:"slug" db:"slug"`
	Owner           string    `json:"owner" db:"owner_id"`
	Description     string    `json:"description" db:"description"`
	Status          string    `json:"status" db:"status"`
	Platform        string    `json:"platform" db:"platform"`
	ActiveVersionID string    `json:"activeVersionID" db:"active_version_id"`
	PageCount       int       `json:"pageCount" db:"page_count"`
	CreatedAt       time.Time `json:"createdAt" db:"created_at"`
	UpdatedAt       time.Time `json:"updatedAt" db:"updated_at"`
}
